package cn.dlc.com.order.feign;

import feign.Logger;
import feign.Request;
import feign.RequestInterceptor;
import feign.Retryer;
import feign.codec.ErrorDecoder;
import org.springframework.context.annotation.Bean;

// 注意不要添加@Configuration的注解，添加之后就是全局的了，
// 所有的feign都用这个，并且不需要再feign上面制定configuration了
public class FeignConfigure {
     public static int connectTimeOutMillis = 12000;//超时时间
     public static int readTimeOutMillis = 12000;
     @Bean
     public Request.Options options() {
          System.out.println("request options.....");
          return new Request.Options(connectTimeOutMillis, readTimeOutMillis);
     }

     // 配置重试
     @Bean
     public Retryer feignRetryer() {
          // 自定义重试次数
          System.out.println("init retry....");
          return new MyRetryer();
     }

     // 配置日志级别
     @Bean
     public Logger.Level feignLoggerLevel(){
          System.out.println("logger .......");
          return Logger.Level.FULL;
     }

     // 配置错误解析，所有的错误都是通过这个进行返回的
     // 这个等同于以前用过的一个通用异常类，参考第一个还是第二个项目封装的
     @Bean
     public ErrorDecoder errorDecoder(){
          System.out.println("init ErrorDecoder.....");
          return new MyErrorDecoder();
     }

     // 配置拦截器，feign的拦截器，和普通的interceptor不同
     @Bean
     public RequestInterceptor getRequestInterceptor(){
          System.out.println("init interceptor.....");
          return new MyRequestInterceptor();
     }

}